<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function demo(arg1, arg2) {
            // 机器精度
            return (arg1 - arg2) < Number.EPSILON;
        }

        console.log(0.1 + 0.2 === 0.3, demo(0.1 + 0.2, 0.3))
        console.log(void 0)

        // 无法转换成数值都会返回false
        // console.log(isNaN())
        // 先进行类型的转换
        console.log(isNaN(NaN));
        console.log(Number.isNaN(12));

        console.log('==值判断')

        console.log(null == undefined)
        // 字符串与数字 会将 字符串转数字
        // 布尔和任意 会将 布尔转数字
        // Symbol
        // 对象和 string、Symbol、number会先转换成基本类型


        // 类型转字符串
        console.log('类型转字符串');
        // null和undefinde、布尔会直接改变
        console.log(String(null),String(undefined),String(true),String(false))
        // 数字直接转换 极大值极小值会转变为指数形式
        console.log(String(Number.MAX_VALUE))
        // Symbol
        // Symbol强制转换直接是对应值，隐式转换会报错
        // 对象转字符串会调用Object.prototype.toString(); 返回[[Class]]
        console.log(String({}))

        // 类型转数字
        console.log('类型转数字');
        //  undefinde => NaN
        console.log(Number(undefined))

        // false => 0 true => 1
        console.log(Number(false),Number(true));

        // null => 0
        console.log(Number(null));

        // 字符串 含字母 => NaN 空串 => 0 '12' => 12
        console.log(Number('a12'),Number(''),Number('12'))

        // Symbol不能转换为数字 报错

        // Object => NaN 
        console.log(Number({}),Number({a:2}))
        // 空数组 => 0 非空 一个数字 => 对应数值 多个 => NaN
        console.log(Number([]),Number(['1']),Number(['1','2']))

        // 先调用valueOf() 在使用toString()
    </script>
</body>

</html>